package edzest.basic;

public class J14_StaticMember {

	public static void main(String[] args) {
		// static 멤버 변수 다루기
		// new Car()로 객체 생성되기 전에
		// static 변수는 만들어짐
		// 그리고 객체생성 할 때마다 ++total로 미리 생성된 total이 증가
		// 그리고 total은 객체마다 값을 공유함
		Car car1 = new Car("BMW", "rx100", 2, 1); //++total;
		// car1 객체가 생성되면
		// 정적변수 total에 1을 증가시킴
		Car car2 = new Car("Honda", "t320", 4, 2); //++total;
		// car2 객체가 생성되면
		// 역시 정적변수 total에 1을 증가시킴
		System.out.println( car1.getCounter() );
		System.out.println( car2.getCounter() );
		System.out.println( Car.total ); // 2
	}

}

// 차량정보를 다루는 클래스 : Car
// 제조사 : maker
// 모델명 : model
// 문짝수 : doors
// 차량번호 : counter

class Car{
	private String maker;
	private String model;
	private int doors;
	private int counter;
	// 멤버변수 maker, model, doors, counter 등은
	// new 연산자로 객체를 생성할 때 변수가 만들어 짐 
	public static int total; // 스태틱은 private으로 하면 의미가 없음
	// 하지만, 정적변수 total은 
	// 프로그램이 실행될때 미리 변수가 만들어 짐 
	
	// 생성자 정의
	public Car() {}
	// 모든 멤버변수를 초기화 하는 생성자 정의
	public Car(String maker, String model, 
			int doors, int counter) {
		this.maker = maker;
		this.model = model;
		this.doors = doors;
		this.counter = counter;
		++total; // Car객체가 생성될 때마다 total 증가
	}
	// 일부 멤버변수를 초기화하는 생성자 정의
	// 문짝이 4개이고 카운터가 0인 차량 등록시 사용
	public Car(String maker, String model){
		//this.maker = maker;
		//this.model = model;
		this(maker, model, 4, 0);
		// this 접두사로 생성자 호출. 
		// 기존에 만들어진 생성자를 간편하게 호출하기 위해
		++total; // Car객체가 생성될 때마다 total 증가
	}
	
	// setter/getter 메서드 정의
	public String getMaker() {
		return maker;
	}
	public void setMaker(String maker) {
		this.maker = maker;
	}
	public String getModel() {
		return model;
	}
	public void setModel(String model) {
		this.model = model;
	}
	public int getDoors() {
		return doors;
	}
	public void setDoors(int doors) {
		this.doors = doors;
	}
	public int getCounter() {
		return counter;
	}
	public void setCounter(int counter) {
		this.counter = counter;
	}
	
	@Override
	public String toString() {
		String result = "";
		result += "메이커:" + maker;
		result += " 모델:" + model;
		result += " 문짝수:" + doors;
		result += " 차량수:" + counter;
		return result;
	}
	
}